package t1;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import static utils.Sleeper.sleep;
/**
 * 测试 查看 线程状态
 * @author fu
 * @date 2021-12-26 14:31
 * 概要：
 * XXXXX
 */
@Slf4j(topic = "c.T1")
public class T1_reentrantlock可重入_test_wait_notify {

    final static Object obj = new Object();
    /**
     * 1. 先让 两个线程全部 wait
     * 2. notifyAll 将只有一个线程竞争锁成功
     *
     * 注意：【断点】 是 Thread模式，一个线程运行 其他线程不会受到断点干扰
     */
    @Test
    public void test1(){

        new Thread(() -> {
            synchronized (obj) {
                log.debug("执行....");
                try {
                    obj.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("其它代码...."); // 断点
            }
        },"t1").start();
        new Thread(() -> {
            synchronized (obj) {
                log.debug("执行....");
                try {
                    obj.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("其它代码...."); // 断点
            }
        },"t2").start();

        sleep(0.5);
        log.debug("唤醒 obj 上其它线程");
        synchronized (obj) {

            obj.notifyAll(); // 唤醒obj上所有等待线程 断点
        }

    }
}
